<?php

namespace App\Traits;

/**
 * 金额（加、减、乘、除、比较、转化）计算 Trait
 *
 * @author WangBin
 * @date 2021/8/17
 */
trait MoneyCalculator
{
    /**
     * 比较 第一个数字 是否 大于 第二的数字
     * Tips:
     *  两个数相等时返回 0； num1 比 num2 大时返回 1； 其他则返回 -1
     *
     * @param String $num1
     * @param String $num2
     * @param int $scale
     * @return int
     * @author WangBin
     * @date 2021/8/17
     */
    protected function compare(String $num1, String $num2, int $scale = 2)
    {
        return bccomp($num1, $num2, $scale);
    }

    /**
     * 加法计算
     *
     * @param String $num1
     * @param String $num2
     * @param int $scale
     * @return
     * @author WangBin
     * @date 2021/8/17
     */
    protected function add(String $num1, String $num2, int $scale = 2)
    {
        return bcadd($num1, $num2, $scale);
    }

    /**
     * 减法计算
     *
     * @param String $num1
     * @param String $num2
     * @param int $scale
     * @return
     * @author WangBin
     * @date 2021/8/17
     */
    protected function sub(String $num1, String $num2, int $scale = 2)
    {
        return bcsub($num1, $num2, $scale);
    }

    /**
     * 除法计算
     *
     * @param String $num1
     * @param String $num2
     * @param int $scale
     * @return
     * @author WangBin
     * @date 2021/8/17
     */
    protected function div(String $num1, String $num2, int $scale = 2)
    {
        return bcdiv($num1, $num2, $scale);
    }

    /**
     * 乘法计算
     *
     * @param String $num1
     * @param String $num2
     * @param int $scale
     * @return
     * @author WangBin
     * @date 2021/8/17
     */
    protected function mul(String $num1, String $num2, int $scale = 2)
    {
        return bcmul($num1, $num2, $scale);
    }

    /**
     * 数字四舍五入格式化
     *
     * @param String $num1
     * @param int $scale
     * @return string
     * @author WangBin
     * @date 2021/8/17
     */
    public function format(String $num1, int $scale = 2)
    {
        return sprintf("%.{$scale}f",$num1);
    }
}